Desafio 14

library(reticulate)#abrindo o pacote reticulate
virtualenv_create("env_me315", python = "C:/Program Files/Python312/python.exe")#criando um ambiente virtual pra usar python
virtualenv: env_me315
use_virtualenv("env_me315", required = TRUE) #manda usar o ambiente virtual criado
#!pip install plotnine
#questao 1
from plotnine import *
from plotnine.data import diamonds

# Ver as primeiras linhas
print(diamonds.head())
   carat      cut color clarity  depth  table  price     x     y     z
0   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98  2.43
1   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84  2.31
2   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07  2.31
3   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23  2.63
4   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35  2.75
#questao 2
# Cria o gráfico usando ggplot (plotnine)
plot = (
    ggplot(diamonds) +  # Define o dataset diamonds para o gráfico
    aes(x='carat', y='price', color='cut') +  # Define as variáveis do gráfico: x, y e cor por corte
    geom_point(alpha=0.4, size=1.5) +  # Adiciona pontos com transparência (alpha) e tamanho definido
    scale_y_continuous(labels=lambda l: [f"${x:,.0f}" for x in l]) +  # Formata o eixo y como valores monetários
    labs(
        title='Relação entre Peso (Carat) e Preço dos Diamantes',  # Título do gráfico
        x='Peso (Carat)',  # Label do eixo X
        y='Preço (USD)',   # Label do eixo Y
        color='Qualidade do Corte'  # Label da legenda
    ) +
    theme_minimal() +  # Aplica um tema minimalista
    theme(
        plot_title=element_text(size=14, weight='bold'),  # Tamanho e peso da fonte do título
        axis_title=element_text(size=12),                 # Tamanho da fonte dos eixos
        legend_position='right'                           # Posição da legenda
    )
)

# Salva o gráfico como arquivo PNG
plot.save("plot.png", width=12, height=8, dpi=300)  # Pode-se adicionar width, height e dpi para maior controle do tamanho e resolução
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:630: PlotnineWarning: Saving 12 x 8 in image.
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:631: PlotnineWarning: Filename: plot.png

##Ações tomadas para garantir boa qualidade do gráfico

Transparência (alpha=0.4): reduz a sobreposição dos pontos, facilitando a visualização de densidades em regiões com muitos dados.

Escala e rótulos claros: eixos nomeados e o eixo y formatado em dólares tornam o gráfico mais legível e informativo.

Cores por categoria (color=‘cut’): adiciona uma dimensão qualitativa que permite observar se o tipo de corte influencia o preço para um mesmo peso.

Tema limpo (theme_minimal): remove elementos visuais desnecessários e melhora o foco na relação entre as variáveis.

Tamanho dos pontos ajustado (size=1.5): garante boa distinção visual sem ruído excessivo.

##Resposta 2 O gráfico de dispersão mostra uma forte associação positiva entre o peso (carat) e o preço (price) dos diamantes: à medida que o peso aumenta, o preço cresce de forma não linear, sugerindo que diamantes maiores são desproporcionalmente mais caros. Observa-se também que a qualidade do corte influencia o preço — para um mesmo peso, diamantes com cortes de melhor qualidade tendem a apresentar preços mais altos. A transparência e o tema limpo permitem visualizar claramente a tendência geral e a variação dentro de cada categoria, produzindo um gráfico informativo e visualmente equilibrado.

knitr::include_graphics("plot.png", dpi = 300, auto_pdf = TRUE)

# Importa a biblioteca plotnine e o dataset diamonds
from plotnine import *
from plotnine.data import diamonds

# Cria o segundo gráfico
plot2 = (
    ggplot(diamonds) +  # Define o dataset diamonds para o gráfico
    aes(x='carat', y='price', color='cut') +  # Define variáveis do gráfico: x, y e cor por corte
    geom_point(alpha=0.4, size=1.2, show_legend=False) +  # Adiciona pontos com transparência e tamanho menor; oculta a legenda
    geom_smooth(method='lm', se=False, color='black', size=1) +  # Adiciona linha de regressão linear sem intervalo de confiança
    facet_wrap('~cut') +  # Cria subplots separados para cada tipo de corte (cut)
    scale_y_continuous(labels=lambda l: [f"${x:,.0f}" for x in l]) +  # Formata o eixo Y como valores monetários
    labs(
        title='Relação entre Peso (Carat) e Preço (Price) por Tipo de Corte',  # Título do gráfico
        x='Peso (Carat)',  # Label do eixo X
        y='Preço (USD)'    # Label do eixo Y
    ) +
    theme_minimal() +  # Aplica tema minimalista
    theme(
        plot_title=element_text(size=14, weight='bold'),  # Tamanho e peso da fonte do título
        axis_title=element_text(size=12)                 # Tamanho da fonte dos eixos
    )
)

# Salva o gráfico como arquivo PNG
plot2.save("plot2.png", width=12, height=8, dpi=300)  # Pode-se adicionar width, height e dpi para controlar o tamanho e resolução
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:630: PlotnineWarning: Saving 12 x 8 in image.
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:631: PlotnineWarning: Filename: plot2.png

##Resposta escrita da questao 3 : #Questao 3 #O gráfico mostra uma clara associação positiva entre o peso (carat) e o preço (price) dos diamantes: conforme o peso aumenta, o preço cresce de maneira acentuada, indicando uma relação não linear. Além disso, observa-se que a qualidade do corte influencia o preço — diamantes com cortes de melhor qualidade, como Ideal e Premium, tendem a ter preços mais elevados para o mesmo peso, enquanto cortes inferiores, como Fair e Good, concentram-se em faixas de preço mais baixas. Para garantir um gráfico de boa qualidade, foram aplicadas medidas como o uso de transparência nos pontos (alpha) para evitar sobreposição, rótulos claros e tema limpo, destacando a tendência principal sem distrações visuais. Assim, conclui-se que o peso é um forte determinante do preço, mas a qualidade do corte também exerce influência relevante.

knitr::include_graphics("plot2.png", dpi = 300, auto_pdf = TRUE)

# Questão 4: Cria o terceiro gráfico
plot3 = (
    ggplot(diamonds) +  # Define o dataset diamonds para o gráfico
    aes(x='carat', y='price', color='cut') +  # Define variáveis do gráfico: x, y e cor por corte
    geom_point(alpha=0.3, size=1) +  # Adiciona pontos com transparência mais baixa e tamanho menor
    facet_grid('color ~ clarity') +  # Cria uma grade de facetas: linhas por cor, colunas por clareza
    scale_y_continuous(labels=lambda l: [f"${x:,.0f}" for x in l]) +  # Formata o eixo Y como valores monetários
    labs(
        title='Relação entre Preço (Price) e Peso (Carat) dos Diamantes',  # Título do gráfico
        subtitle='Facetas mostram combinações de cor (linhas) e clareza (colunas)',  # Subtítulo explicativo
        x='Peso (Carat)',  # Label do eixo X
        y='Preço (USD)',  # Label do eixo Y
        color='Qualidade do Corte'  # Label da legenda de cores
    ) +
    theme_minimal() +  # Aplica tema minimalista
    theme(
        plot_title=element_text(size=14, weight='bold'),   # Configura o tamanho e peso da fonte do título
        plot_subtitle=element_text(size=11),              # Configura o tamanho da fonte do subtítulo
        axis_text_x=element_text(size=7),                 # Tamanho do texto do eixo X
        axis_text_y=element_text(size=7),                 # Tamanho do texto do eixo Y
        strip_text=element_text(size=7),                  # Tamanho do texto das facetas
        legend_position='right'                            # Posição da legenda
    )
)

# Salva o gráfico como arquivo PNG
plot3.save("plot3.png", width=16, height=10, dpi=300)  # Pode-se adicionar width, height e dpi para controlar tamanho e resolução
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:630: PlotnineWarning: Saving 16 x 10 in image.
\\smb\ra237599\Documentos\.virtualenvs\env_me315\Lib\site-packages\plotnine\ggplot.py:631: PlotnineWarning: Filename: plot3.png
knitr::include_graphics("plot3.png", dpi = 300, auto_pdf = TRUE)

##Resposta escrita da questao 4: A visualização mostra que a relação entre peso (carat) e preço (price) dos diamantes continua sendo positiva em todas as combinações de corte, cor e clareza: diamantes mais pesados custam mais caro. Entretanto, a intensidade da relação varia conforme as características de qualidade. Diamantes com cortes superiores (como Ideal e Premium), cores mais puras (como D e E) e clareza elevada (como IF e VVS1) apresentam preços muito mais altos, mesmo para pesos semelhantes. Já diamantes com cortes simples, cores mais amareladas (como J) ou clareza inferior exibem preços menores e maior dispersão. Portanto, embora o peso seja o principal determinante do preço, as variáveis de qualidade modificam fortemente o padrão dessa relação, revelando um efeito combinado entre peso, cor, corte e clareza.